---
title: "Integración en la UE"
author: "Alba Nuez Vilà"
output:
flexdashboard::flex_dashboard:
orientation: rows
vertical_layout: fill
social: menu
source_code: embed
theme: united # Example theme
runtime: shiny
---
```{r setup, include=FALSE}
#Librerías de interés
library(flexdashboard)
library(tidyverse)
library(maps)
library(plotly)
library(shiny)
library(readxl)
library(dplyr)
library(leaflet)
library(lattice)
library(ggplot2)
library(gridExtra)
library(sf)
library(leaflet)
library(rnaturalearth)
library(rnaturalearthdata)
```
```{r}
#Cargamos la base de datos depurada
df <- read_excel("Depurada_ESS11_subset.xlsx")
#La variable país debe ser un factor
df$cntry <- as.factor(df$cntry)
#Nombre de los países
country_names <- c(
AL = "Albania", AT = "Austria", BE = "Belgium", BG = "Bulgaria",
CH = "Switzerland", CY = "Cyprus", CZ = "Czechia", DE = "Germany",
DK = "Denmark", EE = "Estonia", ES = "Spain", FI = "Finland",
FR = "France", GB = "United Kingdom", GE = "Georgia", GR = "Greece",
HR = "Croatia", HU = "Hungary", IE = "Ireland", IS = "Iceland",
IL = "Israel", IT = "Italy", LT = "Lithuania", LU = "Luxembourg",
LV = "Latvia", ME = "Montenegro", MK = "North Macedonia", NL = "Netherlands",
NO = "Norway", PL = "Poland", PT = "Portugal", RO = "Romania",
RS = "Serbia", RU = "Russian Federation", SE = "Sweden", SI = "Slovenia",
SK = "Slovakia", TR = "Turkey", UA = "Ukraine", XK = "Kosovo"
)
df$cntry <- factor(df$cntry, levels = names(country_names), labels = country_names)
# Filtrar países con conteos mayores que 0
country_counts <- df %>% group_by(cntry) %>% summarise(count = n())
valid_countries <- country_counts %>% filter(count > 0) %>% pull(cntry)
# Filtrar el dataframe para incluir solo países válidos
df <- df %>% filter(cntry %in% valid_countries)
df$cntry <- droplevels(df$cntry)
```
Página 1: Actitud e Inmigración
=======================================================================
Column {.sidebar}
-----------------------------------------------------------------------
### Selección de país
```{r}
selectInput('cntry', 'Selecciona el país que quieras visualizar:',
choices = c("Mostrar todos los países" = "all", levels(df$cntry)),
selected = "all")
```
### Sobre el estudio
<div style="font-size: 0.8em;">
<p style="text-align: justify;">Este dashboard muestra cómo cambian las opiniones en los distintos países europeos respecto a la actitud hacia los demás, al impacto de la inmigración, y a la adopción de niños y niñas por parte de personas homosexuales.</p>
<p style="text-align: center;"><b>Página 1: ¿Cómo varía la actitud hacia los demás en diferentes países de la UE? ¿Cómo se correlaciona con la percepción del bienestar en relación con la inmigración?</b></p>
</div>
Column {data-height=80}
-----------------------------------------------------------------------
### ¿Qué actitud se adopta hacia los demás?
```{r}
renderPlot({
selected_country <- input$cntry
#Selección de países
if (selected_country == "all") {
filtered_df <- df
} else {
filtered_df <- df %>% filter(cntry == selected_country)
}
#Histograma actitud hacia los demás
ggplot(filtered_df, aes(x = factor(actitud_positiva))) +
geom_bar(fill = "coral1", color = "white") +
labs(title = "Distribución de 'Actitud hacia los demás'", x = "Actitud", y = "Frecuencia") +
geom_text(stat = 'count', aes(label = ..count..), vjust = -0.5, size = 3) +
annotate("text", x = -Inf, y = Inf, label = "0 = Muy negativa", hjust = -0.1, vjust = 1.5, size = 4, color = "black") +
annotate("text", x = -Inf, y = Inf, label = "10 = Muy positiva", hjust = -0.1, vjust = 3.5, size = 4, color = "black") +
theme(
plot.title = element_text(hjust = 0.5, face = "bold"),
panel.background = element_blank(),
panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
axis.line = element_line(color = "grey"),
axis.text.x = element_text(angle = 90, hjust = 1, color = "black"),
axis.text.y = element_text(color = "black"),
axis.title = element_text(color = "black")
)
})
```
### ¿Cómo impacta la inmigración en la calidad de vida?
```{r}
renderPlot({
selected_country <- input$cntry
#Selección de países
if (selected_country == "all") {
filtered_df <- df
} else {
filtered_df <- df %>% filter(cntry == selected_country)
}
#Valores posibles variable
possible_values_imwbcnt <- seq(min(filtered_df$imwbcnt, na.rm = TRUE), max(filtered_df$imwbcnt, na.rm = TRUE), by = 1)
#Histograma opinión calidad de vida e inmigración
ggplot(filtered_df, aes(x = imwbcnt)) +
geom_histogram(binwidth = 1, fill = "coral1", color = "white") +
labs(title = "Distribución de 'Opinión calidad de vida e inmigración'", x = "Impacto en calidad de vida", y = "Frecuencia") +
geom_text(stat = 'count', aes(label = ..count..), vjust = -0.5, size = 3) +
scale_x_continuous(breaks = possible_values_imwbcnt) +
annotate("text", x = -Inf, y = Inf, label = "0 = Empeoran la calidad de vida", hjust = -0.1, vjust = 1.5, size = 4, color = "black") +
annotate("text", x = -Inf, y = Inf, label = "10 = Mejoran la calidad de vida", hjust = -0.1, vjust = 3.5, size = 4, color = "black") +
theme(
plot.title = element_text(hjust = 0.5, face = "bold"),
panel.background = element_blank(),
panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
axis.line = element_line(color = "grey"),
axis.text = element_text(color = "black"),
axis.title = element_text(color = "black")
)
})
```
Column {data-height=100}
-----------------------------------------------------------------------
### ¿La actitud que tenemos hacia los demás correlaciona con nuestras opiniones acerca de la inmigración?
```{r}
renderPlot({
selected_country <- input$cntry
#Selección de países
if (selected_country == "all") {
filtered_df <- df
} else {
filtered_df <- df %>% filter(cntry == selected_country)
}
#Datos y matriz para el mapa de calor
heatmap_data <- filtered_df %>%
group_by(actitud_positiva, imwbcnt) %>%
summarise(count = n()) %>%
ungroup()
heatmap_matrix <- xtabs(count ~ actitud_positiva + imwbcnt, data = heatmap_data)
#Mapa de calor
levelplot(heatmap_matrix,
xlab = "Actitud",
ylab = "Opinión inmigración y calidad de vida",
col.regions = colorRampPalette(c("white", "coral1")),
scales = list(x = list(rot = 90)),
panel = function(...) {
panel.levelplot(...)
panel.text(row(heatmap_matrix), col(heatmap_matrix),
labels = heatmap_matrix, cex = 0.8) # Display absolute counts
},
main = "Mapa de calor: Actitud vs opinión inmigración y calidad de vida")
})
```
Página 2: Adopción LGTBQ+
=======================================================================
Column {.sidebar}
-----------------------------------------------------------------------
### Selección de país
```{r}
checkboxGroupInput("selected_cntry", "Selecciona los países que quieras visualizar:",
choices = unique(df$cntry),
selected = unique(df$cntry))
```
### Sobre el estudio
<div style="font-size: 0.8em;">
<p style="text-align: justify;">Este dashboard muestra cómo cambian las opiniones en los distintos países europeos respecto a la actitud hacia los demás, al impacto de la inmigración, y a la adopción de niños y niñas por parte de personas homosexuales.</p>
<p style="text-align: center;"><b>Página 2: ¿Cómo difieren las opiniones sobre la adopción LGTBQ+ entre países?</b></p>
</div>
Column {data-height=100}
-----------------------------------------------------------------------
### Opiniones sobre la adopción LGTBQ+
```{r}
renderPlot({
#Filtramos los datos según los países elegidos
filtered_data <- df %>%
filter(cntry %in% input$selected_cntry) %>%
group_by(hmsacld, cntry) %>%
summarise(count = n(), .groups = 'drop') %>%
mutate(hmsacld = factor(hmsacld, levels = 1:5))
#Gráfico de barras apiladas
ggplot(filtered_data, aes(x = cntry, y = count, fill = hmsacld)) +
geom_bar(stat = "identity") +
labs(
title = "Gráfico de Barras Apiladas: Adopción LGTBQ+ por País",
x = "País",
y = "Frecuencia",
fill = "Adopción LGTBQ+"
) +
scale_fill_manual(values = c("#67000D", "#A50F15", "#CB181D", "#EF3B2C", "#FB6A4A")) +
theme_minimal() +
annotate("text", x = Inf, y = Inf, label = "1 = Muy de acuerdo", hjust = 1.1, vjust = 1.5, size = 4, color = "black") +
annotate("text", x = Inf, y = Inf, label = "5 = Muy en desacuerdo", hjust = 1.1, vjust = 3.5, size = 4, color = "black") +
theme(
axis.text.x = element_text(angle = 90, vjust = 0.5, hjust = 1),
plot.title = element_text(hjust = 0.5, face = "bold"),
panel.background = element_blank(),
panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
axis.line = element_line(color = "grey"),
axis.text.y = element_text(color = "black"),
axis.title = element_text(color = "black")
)
})
```